#!/bin/bash

# count_users_by_group.sh
# 功能说明:
# 1. 按用户组统计系统中每个组内用户的数量。
# 2. 支持将统计结果保存到文件（可选）。
# 3. 按用户数量排序输出，方便查看用户最多的组。

# 统计用户组中的用户数量
count_users_in_groups() {
  local output_file="$1"

  # 打印表头
  printf "%-20s %-10s\n" "Group Name" "User Count"
  printf "%-20s %-10s\n" "----------" "----------"

  # 遍历系统中所有组
  getent group | while IFS=: read -r group_name _ _ group_users; do
    # 如果组内没有用户，计数为 0
    if [[ -z "$group_users" ]]; then
      user_count=0
    else
      user_count=$(echo "$group_users" | awk -F, '{print NF}')
    fi

    # 打印统计结果
    printf "%-20s %-10d\n" "$group_name" "$user_count"
  done | sort -k2 -n -r # 按用户数量降序排序

  # 如果指定了输出文件，保存统计结果
  if [[ -n "$output_file" ]]; then
    getent group | while IFS=: read -r group_name _ _ group_users; do
      if [[ -z "$group_users" ]]; then
        user_count=0
      else
        user_count=$(echo "$group_users" | awk -F, '{print NF}')
      fi
      printf "%-20s %-10d\n" "$group_name" "$user_count" >> "$output_file"
    done
    echo "Output saved to $output_file."
  fi
}

# 主函数
main() {
  local output_file=""

  # 检查是否指定输出文件
  if [[ "$1" == "-o" && -n "$2" ]]; then
    output_file="$2"
    echo "Saving output to file: $output_file"
  fi

  # 调用统计函数
  count_users_in_groups "$output_file"
}

# 执行主函数
main "$@"

